package fr.fitec.qcmPlus.actions;



import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import fr.fitec.qcmPlus.actionForms.AuthentificationForm;
import fr.fitec.qcmPlus.beans.Utilisateur;
import fr.fitec.qcmPlus.constants.MappingConstant;
import fr.fitec.qcmPlus.constants.QcmConstants;
import fr.fitec.qcmPlus.constants.SessionVarConstant;
import fr.fitec.qcmPlus.dao.UtilisateurDAO;

/**
 * Cette action gère l'authentification d'un utilisateur : 
 * - vérification que l'utilisateur existe dans la base de donnée 
 * - redirection en fonction du rôle 
 * - sauvegarde des infos utiles en session pour gérer la connexion/déconnexion
 * TODO : - utilisation du hash md5 dans la base de données
 * - revoir les forward vers l'action PreAuthentification
 */
public final class AuthentificationAction extends Action
{
    private static Logger logger = Logger.getLogger(AuthentificationAction.class);
    
    @Override
    public ActionForward execute(final ActionMapping mapping,
            final ActionForm form, final HttpServletRequest request,
            final HttpServletResponse response) throws Exception
    {
        
    	AuthentificationForm f = (AuthentificationForm)(form);
    	
    	UtilisateurDAO uDao = new UtilisateurDAO();
    	Utilisateur u = uDao.findbyNameAndPassword(f.getLogin(), f.getPassword());
    	
    	//utilisateur inexistant
    	if(u==null){
    		//TODO ajouter un msg d'erreur
    		   return (mapping.findForward(MappingConstant.AUTHENTIFICATION));
    	}else{
    		logger.info("connexion utilisateur :"+u.getIdUtilisateur());
    		//Stockage de l'idUtilisateur dans la session
    		request.getSession().setAttribute(SessionVarConstant.ID_UTILISATEUR, u.getIdUtilisateur());
    		//Redirection vers la page en fonction du role
    		if(u.getRole().equals(QcmConstants.ROLE_ADMIN))
    			return (mapping.findForward(MappingConstant.HOMEADMIN));
    		else
    			return (mapping.findForward(MappingConstant.HOMESTAGIAIRE));
    	}
     }
}
